/**
 * C++代码简洁之道: 数据去重
 */
#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <algorithm>


struct Item {
    int id = 0;
    std::string name;
};


int main() {
    std::vector<Item> items = {
            {1, "name1"},
            {2, "name2"},
            {1, "name11"},
            {3, "name3"},
    };

    std::set<int> ids;

    // for (auto iter = items.begin(); iter != items.end();) {
    //     if (!ids.insert(iter->id).second) {
    //         iter = items.erase(iter);
    //     } else {
    //         ++iter;
    //     }
    // }

    auto iter = std::remove_if(items.begin(), items.end(), [&](const Item &item) {
        return !ids.insert(item.id).second;
    });
    items.erase(iter, items.end());

    for (const auto &item: items) {
        std::cout << item.id << ":" << item.name << std::endl;
    }
    return 0;
}